#include "mainwindow.h"
#include <QClipboard>
#include <QApplication>
#include <QListWidgetItem>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    // 窗口基本设置
    setWindowTitle("文本行复制工具");
    setMinimumSize(800, 600);  // 增大窗口默认尺寸

    // 主布局
    QWidget *centralWidget = new QWidget(this);
    QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);
    mainLayout->setContentsMargins(15, 15, 15, 15);  // 整体边距
    mainLayout->setSpacing(15);  // 控件间距

    // 多行编辑框
    textEdit = new QTextEdit(this);
    textEdit->setPlaceholderText("请输入多行文本...（每行内容会显示在下方列表中）");
    textEdit->setStyleSheet("QTextEdit { "
                           "border: 1px solid #aaa; "
                           "border-radius: 6px; "
                           "padding: 8px; "
                           "font-size: 14px; "
                           "}");
    mainLayout->addWidget(textEdit);

    // 列表控件
    listWidget = new QListWidget(this);
    listWidget->setStyleSheet("QListWidget { "
                             "border: 1px solid #aaa; "
                             "border-radius: 6px; "
                             "padding: 5px; "
                             "}"
                             "QListWidget::item { "
                             "height: 50px; "  // 增大列表项高度，适配大按钮
                             "border-bottom: 1px solid #eee; "
                             "}");
    mainLayout->addWidget(listWidget);

    setCentralWidget(centralWidget);

    // 连接文本变化信号（编辑框内容改变时更新列表）
    connect(textEdit, &QTextEdit::textChanged, this, &MainWindow::onTextChanged);
}

MainWindow::~MainWindow()
{
}

// 文本变化时更新列表项
void MainWindow::onTextChanged()
{
    // 清空现有列表项
    listWidget->clear();

    // 获取编辑框文本并按行分割
    QString text = textEdit->toPlainText();
    QStringList lines = text.split("\n");  // 按换行分割行

    // 为每行创建列表项
    for (const QString &line : lines) {
        QListWidgetItem *item = new QListWidgetItem(listWidget);
        ListItemWidget *itemWidget = new ListItemWidget(line, listWidget);

        // 连接复制信号（点击按钮时触发复制）
        connect(itemWidget, &ListItemWidget::copyRequested, this, &MainWindow::copyText);

        // 设置列表项的部件和大小
        listWidget->setItemWidget(item, itemWidget);
        item->setSizeHint(itemWidget->sizeHint());  // 自适应部件大小
    }
}

// 复制文本到剪贴板
void MainWindow::copyText(const QString &text)
{
    QClipboard *clipboard = QApplication::clipboard();
    clipboard->setText(text);  // 将文本放入系统剪贴板
}

// 自定义列表项实现（文本+大按钮）
ListItemWidget::ListItemWidget(const QString &text, QWidget *parent)
    : QWidget(parent)
{
    // 水平布局（左文本，右按钮）
    QHBoxLayout *layout = new QHBoxLayout(this);
    layout->setContentsMargins(10, 10, 10, 10);  // 列表项内边距
    layout->setSpacing(10);  // 文本和按钮的间距

    // 左侧文本标签
    QLabel *textLabel = new QLabel(text, this);
    textLabel->setWordWrap(true);  // 自动换行
    textLabel->setStyleSheet("QLabel { "
                            "font-size: 14px; "
                            "color: #333; "
                            "}");
    layout->addWidget(textLabel, 1);  // 文本占大部分空间（权重1）

    // 右侧复制按钮（放大尺寸）
    QPushButton *copyBtn = new QPushButton("复制", this);
    copyBtn->setMinimumSize(100, 40);  // 按钮最小尺寸（宽100，高40）
    copyBtn->setStyleSheet("QPushButton { "
                          "background-color: #4285f4; "
                          "color: white; "
                          "border-radius: 4px; "
                          "font-size: 15px; "
                          "padding: 8px 16px; "
                          "}"
                          "QPushButton:hover { "
                          "background-color: #3367d6; "
                          "}"
                          "QPushButton:disabled { "
                          "background-color: #cccccc; "
                          "color: #666666; "
                          "cursor: not-allowed; "
                          "}");  // 禁用状态样式

    layout->addWidget(copyBtn);  // 按钮不占额外权重

    // 按钮点击事件：复制文本+禁用5秒
    connect(copyBtn, &QPushButton::clicked, this, [this, text, copyBtn]() {
        // 点击后立即禁用按钮
        copyBtn->setEnabled(false);
        // 发送复制请求
        emit copyRequested(text);
        // 创建定时器，5秒后恢复按钮可用
        QTimer *timer = new QTimer(this);
        timer->setSingleShot(true);  // 只触发一次
        timer->start(5000);  // 5000毫秒 = 5秒
        // 定时器超时后恢复按钮状态
        connect(timer, &QTimer::timeout, this, [copyBtn, timer]() {
            copyBtn->setEnabled(true);
            timer->deleteLater();  // 清理定时器，避免内存泄漏
        });
    });
}